package org.kingtop.service;

import java.util.List;

import org.kingtop.model.IAuthorityPO;
import org.kingtop.model.IRoleAuthorityPO;
import org.kingtop.model.IUserAuthorityPO;

/**
 * 系统权限服务<br>
 * <pre>
 * 如果有缓存，实现如下接口
 * getAll()
 * getAllRoleAuthority()
 * getAllUserAuthority()
 * 如果没有缓存，则实现如下接口
 * get(Long id)
 * getByUsername(String username)
 * getPermissionsByRole(List<String> roleSigns)
 * </pre>
 * @author 陈金波
 *
 */
public interface IAuthorityService {
	
	<T extends IAuthorityPO> T get(Long id);
	
	/**
	 * 获取所有的权限信息
	 * @return
	 */
	<T extends IAuthorityPO> List<T> listAllAuthority();
	
	/**
	 * 获取所有权限与角色的关系
	 * @return
	 */
	<T extends IRoleAuthorityPO> List<T> listAllRoleAuthority();
	
	/**
	 * 获取所有非角色部分自定义权限
	 * @return
	 */
	<T extends IUserAuthorityPO> List<T> listAllUserAuthority();

	/**
	 * 获取指定用户的非角色部分自定义权限
	 * @param username 用户名
	 * @return 权限集合
	 */
	List<String> listByUsername(String username);
	
	/**
	 * 获取指定角色的权限
	 * @param roleSigns 角色标识
	 * @return 权限集合
	 */
	List<String> listAuthorityByRoles(List<String> roleSigns);
	
}
